题意
给你两个由数字组成的字符串$S$,$T$ 长度为$1e3$,问你S中有多少个子序列的值大于字符串T;
思路
首先在比赛的时候一眼确定是$N^2$ 复杂度的DP,但是想了两三个小时却没想到怎么转移,各种构造$dp[i][j]$的含义。可是无功而返。
比赛结束后发现大家都用到了组合数。发现大家这题都用分两类来讨论做题。这时候才焕然大悟。
原来比T大的字符串可以分成两类根本不用瞎几把转移。
于是这题的解法很快就想到了,如果是大于的情况,那么只要第一个字符不是0,那么后面的几个字符串就随便取就行了。
大于的结束了接下来就是相等的情况。如果相等 那么肯定要考虑是从$S$串的哪个作为起点来构造子序列。并且这个S串的起点,的下一个点从哪里转移。这些都是可以DP的。于是我们基本的状态确定了,我们首先要确定目前构造到S串的哪个位置了。同时这个位置对于着T串的哪个位置,这样我们就可以开始转移。
1 |
|